import java.util.Scanner;

/**
 * ClassName: ForTest
 * Package: PACKAGE_NAME
 * Description:循环结构之一：for循环
 * 1. Java中规范了3种循环结构：for、while、do-while
 * 2. 凡是循环结构，就一定会有4个要素：
 * ① 初始化条件
 * ② 循环条件 ---> 一定是boolean类型的变量或表达式
 * ③ 循环体
 * ④ 迭代部分
 * 3. for循环的格式
 * for(①;②;④){
 * ③
 * }
 * 执行过程：① - ② - ③ - ④ - ② - ③ - ④ - ... - ②
 *
 * @Author 糕糕
 * @Create 2024-01-25 14:28
 * @Version 1.0
 */

class ForTest {
    public static void main(String[] args) {
        //需求1：题目：输出5行HelloWorld
        for (int i = 1; i <= 50; i++) {
            System.out.println("HelloWorld");
        }

        //此时编译不通过。因为i已经出了其作用域范围。
        //System.out.println(i);

        //需求2：
        int num = 1;
        for (System.out.print("a"); num < 3; System.out.print("c"), num++) {
            System.out.print("b");

        }

        //输出结果：abcbc

        System.out.println();//换行

        //需求3：遍历1-100以内的偶数，并获取偶数的个数，获取所有的偶数的和
        int count = 0;//记录偶数的个数

        int sum = 0;//记录所有偶数的和

        for (int i = 1; i <= 100; i++) {

            if (i % 2 == 0) {
                System.out.println(i);
                count++;
                sum += i; //sum = sum + i;
            }
        }

        System.out.println("偶数的个数为：" + count);
        System.out.println("偶数的总和为：" + sum);

    }
}


/*
题目：输出所有的水仙花数，所谓水仙花数是指一个3位数，其各个位上数字立方和等于其本身。
例如： 153 = 1*1*1 + 3*3*3 + 5*5*5
*/
class ForTest1 {
    public static void main(String[] args) {

        //遍历所有的3位数
        for (int i = 100; i <= 999; i++) {

            //针对于每一个三位数i，获取其各个位上数值
            int ge = i % 10;
            int shi = i / 10 % 10;  //或 int shi = i % 100 / 10
            int bai = i / 100;

            //判断是否满足水仙花数的规则
            if (i == ge * ge * ge + shi * shi * shi + bai * bai * bai) {
                System.out.println(i);
            }

        }
    }
}


/*
案例：输入两个正整数m和n，求其最大公约数和最小公倍数。

比如：12和20的最大公约数是4，最小公倍数是60。

约数：12为例，约数有1,2,3,4,6,12
      20为例，约数有1,2,4,5,10,20

倍数：12为例，倍数有12,24,36,48,60,72,....
      20为例，倍数有20,40,60,80,....


说明：
1. 我们可以在循环结构中使用break。一旦执行break，就跳出（或结束）当前循环结构。
2. 如何结束一个循环结构？
	方式1：循环条件不满足。（即循环条件执行完以后是false）
	方式2：在循环体中执行了break

*/
class ForExercise {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入一个数：");
        int m = scan.nextInt();//阻塞式方法

        System.out.println("请输入一个数：");
        int n = scan.nextInt();//阻塞式方法
        method(m, n);
    }

    public static void method(int m, int n) {

        int min = Math.min(m, n);
        int max = Math.max(m, n);

        //求最大公约数
        for (int i = min; i >= 1; i--) {
            if (m % i == 0 && n % i == 0) {
                System.out.println("输入的两个数最大公约数为" + i);
                break;
            }

        }

        //求最小公倍数
        for (int i = max; i <= m * n; i++) {

            if (i % m == 0 && i % n == 0) {
                System.out.println("输入两个数的最小公倍数为" + i);
                break;
            }
        }


    }

}